package com.xzx.springbootredis.service.impl;

import com.xzx.springbootredis.entity.Goods;
import com.xzx.springbootredis.mapper.GoodsMapper;
import com.xzx.springbootredis.service.GoodsService;
import com.xzx.springbootredis.service.QiniuService;
import com.xzx.springbootredis.utils.JsonResult;
import com.xzx.springbootredis.utils.Tool;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

@Service
public class GoodsServiceImpl implements GoodsService {
    @Autowired
    private GoodsMapper goodsMapper;

    @Autowired // 注入七牛云服务（之前项目中定义的）
    private QiniuService qiniuService;

    @Override
    public JsonResult addGoods(Goods goods, MultipartFile mainImage) throws IOException {
        // 1. 参数非空校验（修正实体类字段名：goodsName → name）
        if (goods.getName() == null || goods.getName().isEmpty()) {
            return JsonResult.failed("商品名称不能为空");
        }
        if (goods.getPrice() <= 0) {
            return JsonResult.failed("商品价格必须大于0");
        }
        if (goods.getStock() < 0) {
            return JsonResult.failed("库存不能为负数");
        }
        if (mainImage == null || mainImage.isEmpty()) { // 补充主图非空校验
            return JsonResult.failed("商品主图不能为空");
        }

        // 2. 上传主图到七牛云（整合七牛云逻辑）
        String mainImageUrl = qiniuService.uploadFile(mainImage);
        goods.setMainImage(mainImageUrl); // 设置商品主图URL

        // 3. 补充基础字段（创建时间、状态、销量等）
        goods.setStatus(1); // 默认上架状态
        goods.setSales(0); // 初始销量为0
        goods.setCreatedTime(Tool.getCurrentTime()); // 工具类获取时间戳

        // 4. 插入数据库
        int result = goodsMapper.insert(goods);
        if (result == 0) {
            return JsonResult.failed("商品添加失败");
        }
        return JsonResult.success("商品添加成功", goods.getId());
    }

    @Override
    public Goods getGoodsById(Long id) {
        return goodsMapper.getGoodsById(id); // 保持原有逻辑
    }

    @Override
    public List<Goods> getOnSaleGoodsOrderBySales() {
        // 实现：查询上架（status=1）商品，按销量（sales）降序排序
        return goodsMapper.getOnSaleGoodsOrderBySales();
    }
}